#ifndef PLUGINMANAGER_H
#define PLUGINMANAGER_H

#include <QObject>
#include <QDir>
#include <QPluginLoader>
#include <QMap>
#include "IPlugin.h"

class PluginManager : public QObject {
    Q_OBJECT
public:
    explicit PluginManager(QObject* parent = nullptr);

    // 加载所有插件
    void loadAll(const QString& path);
    // 加载单个插件
    bool loadPlugin(const QString& path);
    // 卸载插件
    void unloadPlugin(const QString& name);
    // 获取插件实例
    IPlugin* getPlugin(const QString& name) const;
    // 获取所有插件名称
    QStringList loadedPlugins() const;

signals:
    void pluginLoaded(QString name, QWidget* ui);
    void pluginUnloaded(QString name);

private:
    QMap<QString, QPair<QPluginLoader*, IPlugin*>> m_plugins;
};
#endif // PLUGINMANAGER_H
